<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Zip extends CI_Zip  {


  function MY_Zip() {
    parent::CI_Zip();
  }


  /**************************************
   * seesaw associates | http://seesaw.net
   *
   * client:
   * file:
   * description:
   *
   *Copyright (C) 2008 Matt Kenefick(.com)
   ****************************************
   *
   * Unzip the source_file in the destination dir
	 *
	 * @param   string      The path to the ZIP-file.
	 * @param   string      The path where the zipfile should be unpacked, if false the directory of the zip-file is used
	 * @param   boolean     Indicates if the files will be unpacked in a directory with the name of the zip-file (true) or not (false) (only if the destination directory is set to false!)
	 * @param   boolean     Overwrite existing files (true) or not (false)
	 *
	 * @return  boolean     Succesful or not
	 */
  public function unzip($src_file, $dest_dir=false, $create_zip_name_dir=true, $overwrite=true)
  {
    if(function_exists("zip_open"))
    {
        if(!is_resource(zip_open($src_file)))
        {
            $src_file=dirname($_SERVER['SCRIPT_FILENAME'])."/".$src_file;
        }

        if (is_resource($zip = zip_open($src_file)))
        {
            $splitter = ($create_zip_name_dir === true) ? "." : "/";
            if ($dest_dir === false) $dest_dir = substr($src_file, 0, strrpos($src_file, $splitter))."/";

            // Create the directories to the destination dir if they don't already exist
            $this->create_dirs($dest_dir);

            // For every file in the zip-packet
            while ($zip_entry = zip_read($zip))
            {
              // Now we're going to create the directories in the destination directories

              // If the file is not in the root dir
              $pos_last_slash = strrpos(zip_entry_name($zip_entry), "/");
              if ($pos_last_slash !== false)
              {
                // Create the directory where the zip-entry should be saved (with a "/" at the end)
                $this->create_dirs($dest_dir.substr(zip_entry_name($zip_entry), 0, $pos_last_slash+1));
              }

              // Open the entry
              if (zip_entry_open($zip,$zip_entry,"r"))
              {

                // The name of the file to save on the disk
                $file_name = $dest_dir.zip_entry_name($zip_entry);

                // Check if the files should be overwritten or not
                if ($overwrite === true || $overwrite === false && !is_file($file_name))
                {
                  // Get the content of the zip entry
                  $fstream = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));

                  if(!is_dir($file_name))
                  file_put_contents($file_name, $fstream );
                  // Set the rights
                  if(file_exists($file_name))
                  {
                      chmod($file_name, 0777);
                      //echo "<span style=\"color:#1da319;\">file saved: </span>".$file_name."<br />";
                  }
                  else
                  {
                      echo "<span style=\"color:red;\">file not found: </span>".$file_name."<br />";
                  }
                }

                // Close the entry
                zip_entry_close($zip_entry);
              }
            }
            // Close the zip-file
            zip_close($zip);
        }
        else
        {
          echo "No Zip Archive Found.";
          return false;
        }

        return true;
    }
    else
    {
        if(version_compare(phpversion(), "5.2.0", "<"))
        $infoVersion="(use PHP 5.2.0 or later)";

        echo "You need to install/enable the php_zip.dll extension $infoVersion";
    }
  }

  private function create_dirs($path)
  {
    if (!is_dir($path))
    {
      $directory_path = "";
      $directories = explode("/",$path);
      array_pop($directories);

      foreach($directories as $directory)
      {
        $directory_path .= $directory."/";
        if (!is_dir($directory_path))
        {
          mkdir($directory_path);
          chmod($directory_path, 0777);
        }
      }
    }
  }
}

/* End of file Zip.php */
/* Location: ./system/libraries/Zip.php */